#ifndef _HEAD_H
#define _HEAD_H 1

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <linux/input.h>

#define SIZE 100
#define LENGTH 1024
#define HIGH   600


//视频图片显示
int show_video();
//开机动画
void Boot_animation();
#define COLUMN 1024
#define ROW    600       //关于开机视频

typedef struct chain_table
{
    char bmp_name[20];   /* 数据域 */    
    int x_start;
    int y_start;    

    /* 指针域 */
    struct chain_table *prev;  // 前驱指针
    struct chain_table *next;  // 后继指针
}ct, *ctp;

typedef struct change_color
{
    int lcd_fd; // 用来存放屏幕文件的文件描述符
    int touch_fd;// 用来存放触摸屏文件的文件描述符
    int x;  // x轴坐标
    int y;  // y轴坐标
    int *p; // 映射内存的起始地址
}color;

// 初始化头节点
ctp init_head_node();
// 尾插节点
void tail_insert_node(ctp head, char *bmp_name);
// 从前往后遍历
void printf_data(ctp head);
//初始化链表数据
ctp add_name(const char *dirname);
//接收硬件初始化数据

void  desktop(ctp head,ctp head2,color *data1);
//左边第一张照片,以及图片切换
void frist_change_photo(ctp head,color *data1);
//右边图片排列显示
void right_photo(ctp head2,ctp head,color *data1);
// 显示图片(全屏)
int show_bmp(color *data, char *bmp_name);
//显示照片(局部)
int show_minibmp_at(color *data, char *bmp_name, int x_start, int y_start);
// 在屏幕上以网格形式显示多张照片（每行最多6张，适应1024宽度）
void display_photo_grid(ctp head, color *data);




int init_data(color *data); // 初始化资源（打开文件和申请映射空间）
int show_bmp(color *data, char *bmp_name); // 显示图片
int get_xy(color *data);  // 获取x、y轴坐标
void huishou(color *data); // 程序结束时要关闭文件和撤销映射内存

#endif